package classes_metier;

import blueJ.*;

public class PC extends Ordinateur {
        
	private String numSerie;
    private Magasin mag;
    private PC suivant;
    private boolean jeton;
    static String arret="";
        
    public PC(String m, String p, String num, Magasin mg){
        super(m,p);
        this.numSerie = num;
        this.mag = mg;
    }

    public String getNumSerie() {
        return numSerie;
    }

    public void setNumSerie(String n) {
        this.numSerie = n;
    }

    public Magasin getMag() {
        return mag;
    }

	public void setMag(Magasin m) {
        this.mag = m;
	}

    /*on place un PC dans la boucle*/
    public boolean setSuivant(PC p){
        if(mag==null && p.getMag()==null){
            this.suivant = p;
            return true;
        }
        return false;
    }

    public PC getSuivant(){
        return this.suivant;
    }

    public void setJeton(boolean b){
        jeton = b;
    }

    /*si le PC possede le jeton, il peut le transmettre donc on retourne true, on retourne false sinon*/
    public boolean transmettreJeton(){
        if(jeton==true){
            suivant.setJeton(true);
            jeton = false;
            return true;
        }
        return false;
    }

    public void emettre(String s){
        System.out.println("Le PC "+this.numSerie+" a recu le message: "+s);
    }

    public boolean communicate(String s, String n){
        if(jeton==true){
            PC.arret = this.numSerie;
            if(getDestinataire(n)!=null){
                getDestinataire(n).emettre(s);
                PC.arret = "";
                return true;
            }
            PC.arret = "";
        }
        System.out.println("Ce PC n'a pas le jeton!");
        return false;
    }

    /*on cherche recursivement le pc a qui on veut transmettre le message: si c'est le pc 
     qui suit, on le retourne, sinon on verifie si le suivant du suivant est celui qu'on 
     cherche... ainsi de suite, on s'arrete si on revient au debut de la boucle*/
    protected PC getDestinataire(String num){
        if(suivant.getNumSerie().equals(PC.arret)){
            return null;
        }else if(suivant.getNumSerie().equals(num)){
            return suivant;
        }else{
            return suivant.getDestinataire(num);
        }
    }
}